import 'package:aio/aio.dart';
import 'package:flutter/cupertino.dart';
import 'package:app/generated/app_strings.dart';
import 'package:app/src/config/app_data_config.dart';
import 'package:app/src/config/app_key.dart';
import 'package:app/src/http/bean/user.dart';
import 'package:app/src/ui/route/helper/route_helper.dart';
import 'package:app/src/ui/toast/toast.dart';

///用户管理
class UserManager {
  //用户信息
  static UserInfo? _userInfo = null;

  //用户凭证，用户获取用户信息。
  static UserPassData? _userPassData = null;

  //获取用户
  static UserInfo? getUserInfo() {
    if (_userInfo == null) {
      var json = prefs()?.getString(AppKey.getUserInfoKey());
      if (json != null) {
        _userInfo = UserInfo();
        GsonUtils.parseJson(json, _userInfo);
      }
    }
    return _userInfo;
  }

  //获取用户工号;即登录界面的用户名。
  static String? getUserInfoPersonCode() {
    if (_userInfo == null) {
      return prefs()?.getString(AppKey.getUserInfoPersonCodeKey()) ?? "";
    }
    return _userInfo?.PersonCode;
  }

  ///保存用户
  static setUserInfo(UserInfo? userInfo) {
    _userInfo = userInfo;
    if (userInfo != null) {
      prefs()
          ?.setString(AppKey.getUserInfoPersonCodeKey(), _userInfo?.PersonCode);//保存用户工号（登陆名称）
    }
    prefs()?.setString(AppKey.getUserInfoKey(), _userInfo?.jsonEncode());//将用户的信息，以json数据的形式保存。
    AppDataConfig.setToken(
        _userInfo?.PersonId); //fixme 保存员工ID编号。(PDA保存的是 IcCardNum 卡号)
  }

  static UserPassData? getUserPassData() {
    if (_userPassData == null) {
      _userPassData = UserPassData();
    }
    //保存用户信息凭证
    _userPassData?.UserName = getUserInfo()?.PersonCode;
    _userPassData?.FactoryId = getUserInfo()?.FactoryId;
    return _userPassData;
  }

  ///登录
  static void login(BuildContext context, UserInfo? userInfo) {
    MyToast.showSuccess(AppStrings.of(context).loginSuccessful, context); //登录成功
    UserManager.setUserInfo(userInfo);
    //fixme 判断手机号是否验证
    if (!AppDataConfig.isValidation()) {
      //fixme 跳转到手机验证码验证界面。
      AppRouteHelper.goSmsMobileRoute(context);
    } else {
      if (AppDataConfig.isValidationWithPassword()) {
        //fixme 跳转到密码修改
        AppRouteHelper.goPassWordRoute(context);
      } else {
        //fixme 主页面
        AppRouteHelper.goMainRoute(context);
      }
    }
  }

  ///退出登录
  static void loginOut(BuildContext context, bool isEnableFastGo) {
    //MyToast.showInfo(AppStrings.of(context).loginOutSuccessful, context); //退出成功
    setUserInfo(null);
    AppRouteHelper.goLoginRoute(context, isEnableFastGo);
  }

  ///密码修改
  static void passwordUpdate(BuildContext context) {
    MyToast.showSuccess(
        AppStrings.of(context).passwordUpdateSuccessful, context); //密码修改成功
    //AppRouteHelper.goMainRoute(context);
    UserManager.loginOut(context, true); //退出登陆，需要重新登陆。
  }
}
